
// async 用于修饰一个 function
// - async 修饰的函数，总是返回一个 Promise 对象
// - 函数内的所有值，将自动包装在 resolved 的 promise 中

// await 只能出现在 async 函数内
// - await 让 JS 引擎等待直到promise完成并返回结果
// - 语法：let value = await promise对象;  // 要先等待promise对象执行完毕，才能得到结果
// - 由于await需要等待promise执行完毕，所以await会暂停函数的执行，但不会影响其他异步任务
// 对于错误处理，可以选择在async函数后面使用 `.catch()` 或 在promise对象后使用 `.catch()`

// async/await的作用就是使异步操作以同步的方式去执行

// 很多方法，都是用回调来实现的，在不用修改原代码的基础，我这里实现了waitFunction,将回调的方式变成同步的处理，使得逻辑处理变成同步的情况（实际上还是异步的，只是代码逻辑看起来是顺序的）

const fs = require('fs')
// 将异步读取文件的代码封装
function myReadFile(path) {
  return new Promise((resolve, reject) => {
    fs.readFile(path, 'utf-8', (err, data) => {
      err ? reject(err) : resolve(data.length)
    })
  }).catch(err => {
    console.log(err)
  })
}

async function abc() {
  const a = await myReadFile('./a.txt') // 32
  const b = await myReadFile('./b.txt') // 8
  const c = await myReadFile('./c.txt') // 15
  console.log(b)
  console.log(a)
  console.log(c)
}

abc() // 8 32 15

